package cn.tedu.acquisition.util;

import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;

import java.util.UUID;

/**
 * @Author 得物项目组
 * @Date 2022/6/2 17:37
 * @Version 1.0
 * 专门处理密码的工具类
 * 可以添加@Component组件扫描
 * 也可以不添加该注解,把encode()方法设置为静态也可以
 */
@Component
public class PasswordEncoder {
    public String encode(String rawPassword) {
        // TODO 加密过程，待修改
        // 加密过程
        // 1.使用MD5算法
        // 2.使用随机的盐值
        // 3.循环5次
        // 4.盐的处理方式为：盐+原密码+盐+原密码+盐
        // 注意：因为使用了随机盐，盐值必须被记录下来
        String salt = UUID.randomUUID().toString().replace("-","");
        String encodedPassword = rawPassword;
        for (int i = 0; i < 5; i++) {
            encodedPassword = DigestUtils.md5DigestAsHex((salt+encodedPassword+salt+encodedPassword+salt).getBytes());
        }
        return salt+encodedPassword;
    }
    public boolean matches(String rawPassword,String encodedPassword) {
        String salt = encodedPassword.substring(0,32);
        String newPassword = rawPassword;
        for (int i = 0; i < 5; i++) {
            newPassword = DigestUtils.md5DigestAsHex((salt+newPassword+salt+newPassword+salt).getBytes());
        }
        newPassword = salt+newPassword;
        return newPassword.equals(encodedPassword);
    }
}
